package struct;

public class MyStack {
	LinkedNode header;//栈顶元素  
    public int elementCount;//栈内元素个数  
    public int size;//栈的大小  
      
    /** 
     * 构造函数，构造一个空的栈 
     */  
    public MyStack(){  
        header=null;  
        elementCount=0;  
        size=0;  
    }  
      
    /** 
     * 通过构造器自定义栈的大小 
     * @param size 
     */  
    public MyStack(int size) {  
        header=null;  
        elementCount=0;  
        this.size=size;  
    }  
      
    public void setHeader(LinkedNode header) {  
        this.header=header;  
    }  
      
    public boolean isFull() {  
        if (elementCount==size) {  
            return true;  
        }  
          
        return false;  
    }  
      
    public boolean isEmpty() {  
        if (elementCount==0) {  
            return true;  
        }  
          
        return false;  
    }  
      
    /** 
     * 入栈 
     * @param value 
     */  
    public void push(Object value) {  
        if (this.isFull()) {  
            throw new RuntimeException("Stack is Full");  
        }  
        //注意这里面试将原来的header作为参数传入，然后以新new出来的Node作为header  
        LinkedNode insert=new LinkedNode();
        insert.data=value;
        insert.next=header;
        header=insert;
        elementCount++;  
    }  
      
    /** 
     * 出栈 
     * @return 
     */  
    public Object pop() {  
        if (this.isEmpty()) {  
            throw new RuntimeException("Stack is empty");  
        }  
        Object object=header.data;  
          
        header=header.next;  
          
        elementCount--;  
          
        return object;  
    }  
      
    public void iterator(){
    	if(!this.isEmpty()){
    		LinkedNode node=header;
    		while(node!=null){
    			System.out.print(node.data+" ");
    			node=node.next;
    		}
    	}
    }
    /** 
     * 返回栈顶元素 
     */  
    public Object peak(){  
          
        if (this.isEmpty()) {  
            throw new RuntimeException("Stack is empty");  
        }  
          
        return header.data;  
    }  
  public static void main(String[] args) {
	MyStack my=new MyStack(1);
	my.push(1);
	System.out.println(my.size);
}
}
